namespace Dida
{
  /// <summary>
  /// Specifies how the pawn should react when it's moved, and a collision occured.
  /// </summary>
  public enum CollisionResponse
  {
    /// <summary>
    /// There's no collision response, ie. the pawn will just move through the
    /// collision world.
    /// </summary>
    None,

    /// <summary>
    /// When there's a collision, the pawn will be stopped on the moment there's
    /// a collision.
    /// </summary>
    Stop,

    /// <summary>
    /// When there's a collision, the pawn will slide along the surface it just hit.
    /// </summary>
    Slide,

    /// <summary>
    /// <para>
    /// When there's a collision, the pawn will slide. If the surface it is sliding
    /// against has a lower angle than some default value, the slide motion
    /// will be projected on the horizontal plane.
    /// </para>
    /// <para>
    /// This is the desired motion for movement in walk-like states.
    /// </para>
    /// </summary>
    /// <remarks>
    /// If you want to have specify the angle yourself, you can use
    /// the <see cref="Pawn.MoveSlideHorizontally"/>, which lets you specify
    /// your own configuration parameters.
    /// </remarks>
    SlideHorizontally,

    /// <summary>
    /// The pawn will be stopped when a collision occurs, and the evaluate
    /// method will be called again, so an appropriate response can be calculated.
    /// </summary>
    ReEvaluate,
  }

  public class PawnMove
  {
    Vector3D translation;
    Quaternion rotation;

    CollisionResponse collisionResponse;
    float slideHorThreshold;
  }
}